将 Linux 进程运行在后台的方法有哪些
- 在命令的末尾加上 “&” 符号
- 缺点: 输出的日志会随时出现不利于查看
python manage.py runserver &
- 使用 nohup 命令 + &
- nohup 命令会在当前目录下生成一个 nohup.out 文件,用于记录所运行指定命令时所生成的日志
- & 在后台运行 Linux 进程
nohup python manage.py runserver &
- 使用进程管理功能
- supervisor
supervisor 的介绍
- supervisor 是基于 python 的任务管理工具,用来自动运行各种后台任务,当然你也能直接利用 nohup 命令使任务自动后台运行,但如果要重启任务,每次都自己手动 kill 掉任务进程,这样很繁琐,而且一旦程序错误导致进程退出的话,系统也无法自动重载任务
- 通俗理解: supervisor 帮助我们启动和关闭进程(软件或项目)
supervisor 的安装
- 由于 supervisor 在 python3 下无法使用,因此只能用 python2 去下载
- 安装 supervisor 需要使用 python2 的包管理工具 easy_install,并且要退出虚拟环境进行安装
- 安装 easy_install
- easy_install 就相当于 pip
# 注意: 此时已经退出了虚拟环境
yum install python-setuptools -y
- 安装 supervisor
easy_install supervisor
supervisor 的使用
1. 生成 supervisor 配置文件
echo_supervisord_conf > /etc/supervisord.conf
2. supervisor 配置项的说明
- 注意: 新的配置项需要到 supervisor 配置文件的底部
- supervisor 配置项说明
# xxx 代表进程名称
[program:xxx]
# 程序启动的命令
command = /opt/apache-tomcat-8.0.35/bin/catalina.sh run
# 在supervisord启动的时候也自动启动
autostart = true
# 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
startsecs = 10
# 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
autorestart = true
# 启动失败自动重试次数,默认是3
startretries = 3
# 用哪个用户启动进程,默认是root
user=tomcat
# 进程启动优先级,默认999,值小的优先启动
priority = 999
# 把stderr重定向到stdout,默认false
redirect_stderr = true
# 指定 stdout 日志文件的存放路径
stdout_logfile = /opt/apache-tomcat-8.0.35/logs/catalina.out
# stdout 日志文件大小,默认50MB
stdout_logfile_maxbytes = 20MB
# stdout 日志文件备份数,默认是10; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile_backups = 20
# 默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
stopasgroup = false
# 默认为false,向进程组发送kill信号,包括子进程
killasgroup = false
3. 添加 supervisor 配置项
- 进入 supervisor 配置文件
vim /etc/supervisord.conf
- 在 supervisor 底部添加新的配置项
- 这里添加的配置项就是通过 supervisor 启动或关闭 uWSGI 章节中 test_django 项目
[program:test_django]
# 启动 uWSGI 的命令
# command = 虚拟环境中 uWSGI软件 的绝对路径 --ini 当前项目所对应的 uWSGI 配置文件的绝对路径
command = /root/Envs/env1/bin/uwsgi --ini /opt/django_project/test_django/uwsgi_settings.ini

4.启动 supervisor 服务
supervisord -c /etc/supervisord.conf
5.启动你所配置的所有进程(即: 进入 supervisor 交互界面)
supervisorctl -c /etc/supervisord.conf

6.访问指定网址

supervisor 的命令
1.启动 supervisor 服务
supervisord -c /etc/supervisord.conf
2.启动 supervisor 服务后遇到以下错误的解决办法

- ① 结束掉 supervisor 的进程
kill -9 9525

- ② 执行以下命令
unlink /tmp/supervisor.sock
- ③ 重新启动 supervisor 服务
supervisord -c /etc/supervisord.conf

3.启动某个或所有进程
- 启动你所配置某个进程
- 命令: supervisorctl -c /etc/supervisord.conf start 进程名称
supervisorctl -c /etc/supervisord.conf start test_django
- 命令: supervisorctl start 进程名称
supervisorctl start test_django
- 启动所有你所配置的进程
supervisorctl -c /etc/supervisord.conf start all
supervisorctl start all
4.停止某个或所有进程
- 停止你所配置某个进程
- 命令: supervisorctl -c /etc/supervisord.conf stop 进程名称
supervisorctl -c /etc/supervisord.conf stop test_django
- 命令: supervisorctl stop 进程名称
supervisorctl stop test_django
- 停止所有你所配置的进程
supervisorctl -c /etc/supervisord.conf stop all
supervisorctl stop all
5.重启某个或所有进程
- 重启你所配置某个进程
- 命令: supervisorctl -c /etc/supervisord.conf restart 进程名称
supervisorctl -c /etc/supervisord.conf restart test_django
- 命令: supervisorctl restart 进程名称
supervisorctl restart test_django
- 重启所有你所配置的进程
supervisorctl -c /etc/supervisord.conf restart all
supervisorctl restart all
6.查看某个或所有进程的状态
- 查看你所配置的进程状态
- 命令: supervisorctl -c /etc/supervisord.conf status 进程名称
supervisorctl -c /etc/supervisord.conf status test_django
- 命令: supervisorctl status 进程名称
supervisorctl status test_django
- 查看所有你所配置的进程状态
supervisorctl -c /etc/supervisord.conf status all
supervisorctl status all
7.更新新的配置到 supervisor 中
supervisorctl update
8.重新启动配置中的所有程序
supervisorctl reload
9.查看错误信息
- 当启动某个你所配置的进程的时候发生了错误,可以一下命令查看错误信息
- 命令: supervisorctl tail 进程名称 stderr
supervisorctl tail test_django stderr
10.启动你所配置的所有进程 -> 进入 supervisor 交互状态
supervisorctl -c /etc/supervisord.conf
supervisorctl
11.进入 supervisor 交互状态后的命令
- 启动某个或所有进程
- 启动你所配置某个进程
- 命令: start 进程名称
supervisor> start test_django
- 启动所有你所配置的进程
supervisor> start all
- 停止某个或所有进程
- 停止你所配置某个进程
- 命令: stop 进程名称
supervisor> stop test_django
- 停止所有你所配置的进程
supervisor> stop all
- 重启某个或所有进程
- 重启你所配置某个进程
- 命令: restart 进程名称
supervisor> restart test_django
- 重启所有你所配置的进程
supervisor> restart all
- 查看某个或所有进程的状态
- 查看你所配置的进程状态
- 命令: status 进程名称
supervisor> status test_django
- 查看所有你所配置的进程状态
supervisor> status all